/*
3.编写一个 C 程序，输入一个正整数n，然后计算并输出1到n的中所有的完全数，完全数是指其所有因子（除本身外）之和等于它本身的数。
例如：6 = 1 + 2 + 3
     28 = 1 + 2 + 4 + 7 + 14
*/
#include <stdio.h>

int isPerfect(int num) 
{  
    int sum = 0;  
  
    /* 遍历 1 到 num-1，计算所有因子的和 */ 
    for (int idx = 1; idx < num; idx++) 
    {  
        if (num % idx == 0) 
        {  
            sum += idx;  
        }  
    }  
  
    /* 如果因子之和等于 num 本身，返回 1，否则返回 0 */  
    return (sum == num) ? 1 : 0;  
}  

int main() {  
    int n;  
  
    printf("请输入一个正整数 n: ");  
    scanf("%d", &n);  
  
    printf("1 到 %d 之间的完全数有：\n", n);  
  
    for (int idx = 1; idx <= n; idx++) 
    {  
        if (isPerfect(idx)) 
        {  
            printf("%d\n", idx);  
        }  
    }  
  
    return 0;  
}  
  
